package tool.dialog;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.Set;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

import tool.CustomizedButton;

/**rappresenta una finestra di dialogo che ti chiede di inserire la chiave che rappresenterà
 * il Foreground da inserire nella mappa corrente. Tale finestra di dialogo, oltre a fornire la
 * "grafica" interagente con l'utente, fornirà anche un sistema per verificare l'eventuale presenza
 * della chiave nella mappa. Se tale chiave è presente, lancerà un messaggio d'errore
 * 
 * @author koldar
 * @version 1.0
 */
public class KeyDialog extends JDialog implements ActionListener{

	private static final long serialVersionUID = -4443034718695447594L;
	
	/** Dimensioni della finestra di dialogo. */
	private static final Dimension DIALOG_SIZE = new Dimension(400, 200);
	/** Dimensioni preferite del JExclusiveStringField. */
	private static final Dimension TEXTFIELD_PREFERRED_SIZE = new Dimension(150, 20);
	/** Dimensioni preferite dei pulsanti. */
	private static final Dimension BUTTON_PREFERRED_SIZE = new Dimension(100, 40);
	
	// Scritte sui componenti.
	private static final String TXT_LABEL = "Please enter a keyword for this element:";
	private static final String TXT_OK = "Ok";
	private static final String TXT_CANCEL = "Cancel";
	
	/**indica il set di chiavi già presenti sulla mappa*/
	private Set<String> keySet;
	/**indica il componente che deve ricevere l'input dell'utente*/
	private JExclusiveStringField inputKey;
	/**indica il pulsante ok*/
	private JButton ok;
	/**indica il pulsante cancel*/
	private JButton cancel;
	/**indica (se non NULL) la chiave scelta dall'utente*/
	private String choosenKey;
	
	public KeyDialog(Frame parent,Set<String> keyset,String initialuserstring){
		super(parent,"Write a Foreground key: ",true);
		this.setLayout(new GridBagLayout());
		GridBagConstraints lim = new GridBagConstraints();
		this.setSize(KeyDialog.DIALOG_SIZE);
		this.keySet = keyset;
		
		JLabel inputKeyLabel = new JLabel(KeyDialog.TXT_LABEL);
		lim.gridx = 0;
		lim.gridy = 0;
		lim.weighty = 0.5;
		lim.anchor = GridBagConstraints.CENTER;
		lim.gridwidth = 2;
		this.add(inputKeyLabel, lim);
		
		this.inputKey = new JExclusiveStringField(this.keySet,initialuserstring);
		this.inputKey.setPreferredSize(KeyDialog.TEXTFIELD_PREFERRED_SIZE);
		lim.gridx = 0;
		lim.gridy = 1;
		this.add(inputKey, lim);
		
		this.ok = new CustomizedButton(KeyDialog.TXT_OK,20,Color.WHITE,Color.BLUE,Color.WHITE,Color.BLUE,new Color(50,0,200),Color.GREEN,3,"Britannic Bold",Color.BLUE,Color.WHITE,Color.GREEN);
		this.ok.setPreferredSize(KeyDialog.BUTTON_PREFERRED_SIZE);
		lim.gridx = 0;
		lim.gridy = 2;
		lim.gridwidth = 1;
		this.add(ok, lim);
		
		this.cancel = new CustomizedButton(KeyDialog.TXT_CANCEL,20,Color.WHITE,Color.BLUE,Color.WHITE,Color.BLUE,new Color(50,0,200),Color.GREEN,3,"Britannic Bold",Color.BLUE,Color.WHITE,Color.GREEN);
		this.cancel.setPreferredSize(KeyDialog.BUTTON_PREFERRED_SIZE);
		lim.gridx = 1;
		lim.gridy = 2;
		this.add(cancel, lim);
		
		this.choosenKey=null;
		
		this.ok.addActionListener(this);
		this.ok.setMnemonic(KeyEvent.VK_ENTER);
		this.cancel.addActionListener(this);
		
		this.setVisible(true);
	}
	
	/**
	 * 
	 * @return la chiave che l'utente ha già scelto. La sua unicità è già stata verificata
	 */
	public String getUserKey(){
		return this.choosenKey;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==this.ok){
			if (this.inputKey.getState()==JExclusiveStringField.CORRECT){
				this.choosenKey=this.inputKey.getValue();
				this.dispose();
				return;
			}
		}
		if (e.getSource()==this.cancel){
			this.dispose();
		}
	}
	
	
	
}
